# 【】win10，写入表格成功，写出txt失败】
# 注意【先升级pip install --upgrade pip[否则安装pyuserinput==0.1.10无法自动安装pyhook]】
# 注意【可安装pysimplegui==4.60.5.0;webbrowser==;openpyxl==3.1.5;keyboard==0.13.5;pywin32==306;pyuserinput==0.1.10[自动安装hook];pyautogui==0.9.54;python-docx==1.1.2;selenium==4.23.1;beautifulsoup4==4.12.3】
# 注意【可安装pymouse==1.0[在pymouse库的初始化方法中第92行的from windows import PyMouse,PyMouseEvent改为from pymouse.windows import PyMouse,PyMouseEvent。]】
# 修改【_edge_sci_url_title_abstr_3_1.py修改文件保存路径*2处；桌面新建sci文件夹】
# 修改【_edge_sci_url_title_abstr_3_1.py修改右键翻译的单击位置；右键往下次数】

# 1只导出xlsx：勾选只导出xlsx，（修改一页个数25,50,100）（修改爬第几页or爬几页），单页爬取或多页爬取
# 2合并xlsx：选择xlsx文件，选择表1（如误选，可清空），确定，选择表2，确定，合并【】
# 3爬取中英文txt：如已有同名txt文件存在，则会在尾行补充。
# 4txt转docx：完成后，需要替换段落符号^p为空。


import PySimpleGUI as sg
import webbrowser#用默认浏览器打开网页！！！
# import requests
import os
import openpyxl

# from _edge_sci_url_title_abstr_1 import sci
# from _edge_sci_url_title_abstr_2 import sci
from _edge_sci_url_title_abstr_3_1 import sci
from _txt2docx_1 import opentxt
from time import sleep


# headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27'}
# 定义界面布局【】一个[]一行
layout = [
#     [sg.FileBrowse(file_types=(("TXT Files", "*.txt"), ("ALL Files", "*.*")))],#打开浏览
    [sg.Text('关键词:   '), sg.Input(default_text='输入英文关键词',key='-KEYWORD-'),
     sg.Button('sci搜索'),
     sg.Button('txt转docx')],
    [sg.Text('一页个数【只导出xlsx时有效，txt25】:'), #sg.Input(default_text='25',key='-COUNT-'),
    sg.Combo(['25','50','100'],'25',key='-Combo1-',background_color='white',size=(15,1),enable_events=True)],
    [sg.Checkbox('只导出xlsx',key='-CHECKBOX1-'),#disabled=True)],
    sg.Button('选择xlsx文件'),
    sg.Button('合并'),
    sg.Button('清空')],
    [sg.Text('爬第几页:'), sg.Input(default_text='1',key='-PAGE-'),
     sg.Button('单页爬取')],
    [sg.Text('爬几页:   '), sg.Input(default_text='1-2',key='-PAGES-'),
     sg.Button('多页爬取')],
    [sg.Text('网址:'), sg.Input(default_text='https://www.sciencedirect.com/search?qs=microfluid%20sphere&show=25&offset=0',size=(70,1),key='-URL-')],
    [sg.Multiline(size=(80, 3), key='-OUTPUT-', disabled=True, autoscroll=True)],
]#显示文本框

# 创建窗口
window = sg.Window('sciencedirect.com 爬链接+标题+摘要txt【】桌面\\sci', layout)
# 位置
window.Location=(700,0)
#窗口置顶
window.Finalize()
window.TKroot.attributes('-topmost', 1)

xlsxlist=[]
# 事件循环
while True:
    event, values = window.read()

    if event == sg.WINDOW_CLOSED:
        break
    if event =='sci搜索':
        search_url="https://www.sciencedirect.com/search?qs="+values['-KEYWORD-']
        webbrowser.open(search_url)
        
#     按钮事件
#     if values['-CHECKBOX1-']==True:
#         window['-Combo1-'].update(disabled=True)
#     else:
#         window['-Combo1-'].update(disabled=False)
        
    if event == '单页爬取':#【定义输入框的值】
        keyword = values['-KEYWORD-'].replace(" ","%20")
#         count=values['-Combo1-']
#         count = values['-COUNT-']
        page = values['-PAGE-']
#         url=values['-URL-']
#         search_url=url+keyword+"&show="+str(count)+"&offset="+str(25*int(page))
        
#         output_text = f"搜索关键词: {keyword}\n搜索个数: {count}\n搜索页数: {page}\n搜索结果示例1\n搜索结果示例2\n搜索结果示例3"
        sleep(2)
        try:
            if values['-CHECKBOX1-']==False:  #导出全部 【只导出txt     
                sci(25,keyword,page)
            else:#只导出xlsx
                sci(values['-Combo1-'],keyword,page,True)#只导出xls
            sg.popup('爬取成功!')
        except :
            sg.popup('出错!')
    if event=="多页爬取":
        keyword = values['-KEYWORD-'].replace(" ","%20")
        page_le = values['-PAGES-'][0]
        page_ri = values['-PAGES-'][-1]
#         print(page_le,page_ri)
        try:
            for i in range(int(page_le),int(page_ri)+1):
                print(i)
                if values['-CHECKBOX1-']==False:  #导出全部            
                    sci(25,keyword,i)
                else:#只导出xlsx
                    sci(values['-Combo1-'],keyword,i,True)
    #         for i in range(1,int(pages)+1):#i从0开始，pages=1是，爬第一页，
    #             output_text="正在爬第"+str(i)+"页 https://www.sciencedirect.com/search?qs="+keyword.replace(" ","%20")+"&show=25&offset="+str(i*25)
    #             window['-OUTPUT-'].update(output_text)
    #             sleep(2)
    #             sci(keyword,i)#关键词+第几页
            sg.popup('爬取成功!')
        except:
            sg.popup('出错!')
    if event =='选择xlsx文件':#打开子窗口
        try:
            # 打开文件对话框选择 XLS 文件
            xlsx_file = sg.popup_get_file('选择要打开的 XLSX 文件', file_types=(('EXCEL Files','*.xlsx'),("Excel Files", "*.xls")))
#             print(xlsx_file)
            if xlsx_file:
                xlsxlist.append(xlsx_file)
            window['-OUTPUT-'].update([xlsxlist])
            window['单页爬取'].update(disabled=True)
            window['多页爬取'].update(disabled=True)
            
        except:
            sg.popup('出错!')
    if event =='合并':
        try:
            new_file = openpyxl.Workbook()        # 新建一个文件用于存放合并后的数据
            st = new_file.create_sheet('合并后')
            for f in xlsxlist:
                file = openpyxl.load_workbook(f)        # 读取每个文件
                sheets = file.worksheets      # 获取该文件的所有表
             
                for sheet in sheets:
                    for row in sheet.iter_rows(1,sheet.max_row,1,sheet.max_column):#第一个参数起始行？？？
                        row_list = [i.value for i in row]
    #                     print(row_list)
    #                     sleep(30)
    #                     row_list = [f.split('.')[0]] + row_list        # 把xxx区加在最前面，以方便查看合并后是数据是哪个区
                        st.append(row_list)        # 把行写入st表里
             
            new_file.remove(new_file['Sheet'])          # 删除创建new_file文件时默认产生的Sheet表
            new_file.save(xlsxlist[0])#保存文件名为第一个xlsx文件，即xxx_1.xlsx
            savexlsxfile=xlsxlist[0].replace("_1.","_总.")
            new_file.save(savexlsxfile)
    #         new_file.save(r"C:\\Users\\King\\Desktop\\多文件合并.xlsx")
            window['单页爬取'].update(disabled=False)
            window['多页爬取'].update(disabled=False)
            sg.popup('成功!')
        except:
            sg.popup('出错!')
    if event =='清空':
        xlsxlist=[]
        window['-OUTPUT-'].update([xlsxlist])
#     if event=='txt转docx':
#         try:
#             # 打开文件对话框选择 XLS 文件
#             txt_file = sg.popup_get_file('选择要打开的 txt 文件', file_types=(('TXT Files','*.txt')))
#             if txt_file:
#                 print(txt_file)
#         except:
#             sg.popup('出错!')
    if event=='txt转docx':
        opentxt()
        
# 关闭窗口
window.close()